今天要介紹好用的分類用法Namespace
與 Label
,試著想像一個情境,當你有100個服務且有三個不同環境(DEV
、QA
、PROD
),為了節省成本你將 QA
與 DEV
的服務放在相同的 K8S Cluster
,那麼你至少就會有 200
個服務在K8S Cluster
上,這麼多的服務該怎麼管理,今天第一個介紹的管理方式 Namespace
。
Namespace
?Namespace
可以用於分類以及管理服務,常用分類方式有 「ENV
環境」、「專案名稱」,例如以下方式:
ENV
環境」分類:
ENV
環境」、「專案名稱」分類:
注意: Kubernetes
在起後服務後會有初始的三個 Namespace:
分別是:
default
: 當服務不指定 Namespace
都會被分派到該 Namespace
。kube-system
: 該 Namespace
用於存放與系統相關的服務。kube-public
: 該 Namespace
保留給 K8S
群集使用,並提供所有人都可以看(包含未經過身分驗證人員),所以應避免將服務放置該 Namespace
。Namespace
# 建立 namespace
apiVersion: v1
kind: Namespace
metadata:
name: apple
---
apiVersion: extensions/v1beta1 ## API 版本
kind: Deployment ## 元件種類
metadata: ## 用來描述目前物件的資料
name: nginx ## Deployment 名稱
namespace: apple ## Deployment 屬於哪個 namespace 擁有
labels:
service: http-server ## 賦予該元件特定標籤
spec:
replicas: 3 ## 運行 3 個 Pod
selector: ## 指定 Deployment 管理的 Pod 規則
matchLabels: ## Pod 必須具備 service: http-server 的標籤
service: http-server
template:
metadata: ## 賦予 Pod具備 service: http-server 的標籤
labels:
service: http-server
spec:
containers: ## 描述容器的資料
- name: nginx-deploy ## 容器名稱
image: nginx ## 容器映像檔
ports: ## 指定容器 Port 號
- containerPort: 80
---
apiVersion: v1 ## k8s api 版本號
kind: Service ## 指定為 Service 物件
metadata: ## 用來描述 Service 物件的資料
name: nginx-service ## Service 的名稱
namespace: apple ## Deployment 屬於哪個 namespace 擁有
spec:
type: NodePort ## 指定Service的型別
selector:
service: http-server ## 對應那一個 Deployment 的標籤
ports:
- port: 80 ## 容器外 Port
targetPort: 80 ## 容器內 Port
Label
?Label
是以 「Key
/Value
」的形式附加到任何的元件上,像是:Pod
、Deployment
、Service
、Node
,那麼定義 Label
功用呢? 請看以下範例:
有兩台 Node
,一台硬碟為 ssd
,一台為「一般硬碟」,所以我們可以為這兩台 Node
加上 Label
:
若今天有服務需要使用到 ssd
,就可以透過 yaml
檔案指定服務必須包含 「disk: ssd
」的標籤才可以建立服務。
於新建的 Pod
上面新增 Label
「service
: nginx
」,接著當我們建立 Deploymant
並告至該元件必須管理含有service: nginx
標籤的 Pod
,如以下 yaml
示範:
apiVersion: extensions/v1beta1 ## API 版本
kind: Deployment ## 元件種類
metadata: ## 用來描述目前物件的資料
name: nginx ## Deployment 名稱
namespace: apple ## Deployment 屬於哪個 namespace 擁有
labels:
service: nginx-deployment ## 賦予該元件特定標籤
spec:
replicas: 3 ## 運行 3 個 Pod
selector: ## 指定 Deployment 管理的 Pod 規則
matchLabels: ## Pod 必須具備 service: nginx 的標籤
service: nginx
template:
metadata: ## 賦予 Pod具備 service: nginx 的標籤
labels:
service: nginx
spec:
containers: ## 描述容器的資料
- name: nginx-deploy ## 容器名稱
image: nginx ## 容器映像檔
ports: ## 指定容器 Port 號
- containerPort: 80
以上就是今天要介紹的內容,那麼今天內容就寫到這邊,明天會介紹有效管理 K8S
的工具。